package Redis

import (
	"fmt"
	"strconv"
	config "westarry/gin-fox/gin-fox/config"

	"github.com/gomodule/redigo/redis"
)
 
type Redis struct {
	client redis.Conn
}
 
var RedisClient Redis
 
//初始化redis
func InitRedis() *Redis{
	c:=config.InitConfig()
	//连接redis
	client, err := redis.Dial("tcp", c.Redis.Host+":"+strconv.Itoa(c.Redis.Port))
	if err != nil {
		fmt.Println("[ginfox]redis连接失败:" + err.Error())
	}
	// _, err = client.Do("auth", c.Redis.Password)
	// if err != nil {
	// 	fmt.Println("[ginfox]redis连接失败:" + err.Error())
	// }
	//初始化全局redis结构体
	RedisClient = Redis{client: client}
	fmt.Println("[ginfox]redis连接成功")
	return &RedisClient
}
 
//设置数据到redis中（string）
func (rs *Redis) SetStr(key string, value string) error {
	_, err := rs.client.Do("Set", key, value)
	return err
}
 
//设置数据到redis中（string）
func (rs *Redis) SetStrNotExist(key string, value string, expireSecond int) bool {
	val, err := rs.client.Do("SET", key, value, "EX", expireSecond, "NX")
	if err != nil || val == nil {
		return false
	}
	return true
}
 
//设置数据到redis中（string）
func (rs *Redis) SetStrWithExpire(key string, value string, expireSecond int) error {
	_, err := rs.client.Do("Set", key, value, "ex", expireSecond)
	return err
}
 
//获取redis中数据（string）
func (rs *Redis) GetStr(key string) (string, error) {
	val, err := rs.client.Do("Get", key)
	if err != nil {
		return "", err
	}
	return string(val.([]byte)), nil
}
 
//设置数据到redis中（hash）
func (rs *Redis) HSet(key string, field string, value string) error {
	_, err := rs.client.Do("HSet", key, field, value)
	return err
}
 
//获取（hash）
func (rs *Redis) HGet(key string, field string) (string, error) {
	val, err := rs.client.Do("HGet", key, field)
	if err != nil {
		return "", err
	}
	return string(val.([]byte)), nil
}
 
//删除
func (rs *Redis) DelByKey(key string) error {
	_, err := rs.client.Do("DEL", key)
	return err
}
 
//设置key过期时间
func (rs *Redis) SetExpire(key string, expireSecond int) error {
	_, err := rs.client.Do("EXPIRE", key, expireSecond)
	return err

}